home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Controls / Visual Basic Controls.iso / vbcontrol / intmail2 / smtpmain.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-07-27  |  7.9 KB  |  311 lines

  1. unit smtpmain;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, WinProcs, WinTypes, Messages, Classes, Graphics, Controls,
  7.   Forms, Dialogs, Buttons, ExtCtrls, StdCtrls, SMTPSu,IniFiles, mssmtp,
  8.   Menus, ShellAPI, Mssocket, msDef, msmsg, ComCtrls;
  9.  
  10. type
  11.   TSMTPForm = class(TForm)
  12.     ToolBar: TPanel;
  13.     SendButton: TSpeedButton;
  14.     SetupButton: TSpeedButton;
  15.     ExitButton: TSpeedButton;
  16.     SendInfoPanel: TPanel;
  17.     ToEdit: TEdit;
  18.     Label1: TLabel;
  19.     Label3: TLabel;
  20.     SubjectEdit: TEdit;
  21.     CancelButton: TSpeedButton;
  22.     BodyMemo: TMemo;
  23.     AttachButton: TSpeedButton;
  24.     Panel1: TPanel;
  25.     MainMenu1: TMainMenu;
  26.     File1: TMenuItem;
  27.     Send1: TMenuItem;
  28.     Cancel1: TMenuItem;
  29.     N1: TMenuItem;
  30.     Exit1: TMenuItem;
  31.     Attach1: TMenuItem;
  32.     Setup1: TMenuItem;
  33.     Help1: TMenuItem;
  34.     About1: TMenuItem;
  35.     Bevel1: TBevel;
  36.     Bevel2: TBevel;
  37.     Panel2: TPanel;
  38.     ListBox1: TListBox;
  39.     msSMTPClient1: TmsSMTPClient;
  40.     msMessage1: TmsMessage;
  41.     StatusBar1: TStatusBar;
  42.     ProgressBar1: TProgressBar;
  43.     procedure ExitButtonClick(Sender: TObject);
  44.     procedure SendButtonClick(Sender: TObject);
  45.     procedure CancelButtonClick(Sender: TObject);
  46.     procedure SetupButtonClick(Sender: TObject);
  47.     procedure FormCreate(Sender: TObject);
  48.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  49.     procedure AttachButtonClick(Sender: TObject);
  50.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  51.     procedure About1Click(Sender: TObject);
  52.     procedure FormResize(Sender: TObject);
  53.     procedure msSMTPClient1Connecting(Sender: TObject);
  54.     procedure msSMTPClient1Connected(Sender: TObject);
  55.     procedure msSMTPClient1Disconnected(Sender: TObject);
  56.     procedure msSMTPClient1Preparing(Sender: TObject);
  57.     procedure msSMTPClient1Sending(Sender: TObject);
  58.     procedure msSMTPClient1Sent(Sender: TObject);
  59.     procedure msSMTPClient1TransferProgress(Sender: TObject; Perc,
  60.       ByteCount, LineCount: Longint);
  61.   private
  62.     { Private declarations }
  63.     IniName : string;
  64.     procedure EnableControls;
  65.     procedure DisableControls;
  66.   protected
  67.     procedure WMDropFiles(var Msg : TMessage); message WM_DROPFILES;
  68.   public
  69.     { Public declarations }
  70.   end;
  71.  
  72. var
  73.   SMTPForm: TSMTPForm;
  74.  
  75. implementation
  76.  
  77. uses msabout;
  78.  
  79. {$R *.DFM}
  80.  
  81. procedure TSMTPForm.EnableControls;
  82. var
  83.   i : Integer;
  84.   SB : TSpeedButton;
  85. begin
  86.   for i:=0 to ToolBar.ControlCount-1 do
  87.   if ToolBar.Controls[i] is TSpeedButton then
  88.   begin
  89.     SB:=ToolBar.Controls[i] as TSpeedButton;
  90.     SB.Enabled:=SB.Tag<>1;
  91.   end;
  92.   ListBox1.Enabled:=true;
  93.   Send1.Enabled:=true;
  94.   Cancel1.Enabled:=false;
  95.   Attach1.Enabled:=true;
  96.   Exit1.Enabled:=true;
  97.   Setup1.Enabled:=true;
  98.   Help1.Enabled:=true;
  99.   SendInfoPanel.Enabled:=true;
  100.   BodyMemo.Enabled:=true;
  101.   Cursor:=crDefault;
  102.   ListBox1.Cursor:=crDefault;
  103. end;
  104.  
  105. procedure TSMTPForm.DisableControls;
  106. var
  107.   i : Integer;
  108.   SB : TSpeedButton;
  109. begin
  110.   for i:=0 to ToolBar.ControlCount-1 do
  111.   if ToolBar.Controls[i] is TSpeedButton then
  112.   begin
  113.     SB:=ToolBar.Controls[i] as TSpeedButton;
  114.     SB.Enabled:=SB.Tag=1;
  115.   end;
  116.   ListBox1.Enabled:=false;
  117.   Send1.Enabled:=false;
  118.   Cancel1.Enabled:=true;
  119.   Attach1.Enabled:=false;
  120.   Exit1.Enabled:=false;
  121.   Setup1.Enabled:=false;
  122.   Help1.Enabled:=false;
  123.   SendInfoPanel.Enabled:=false;
  124.   BodyMemo.Enabled:=false;
  125.   Cursor:=crHourGlass;
  126.   ListBox1.Cursor:=crHourGlass;
  127. end;
  128.  
  129. procedure TSMTPForm.ExitButtonClick(Sender: TObject);
  130. begin
  131.   Close;
  132. end;
  133.  
  134. procedure TSMTPForm.SendButtonClick(Sender: TObject);
  135. var
  136.   i : Integer;
  137. begin
  138.   msMessage1.Recipients.Clear;
  139.   msMessage1.Recipients.AddAddress(ToEdit.Text,'');
  140.   msMessage1.Subject:=SubjectEdit.Text;
  141.   msMessage1.Body:=BodyMemo.Lines;
  142.   msMessage1.Attachments.Clear;
  143.   for i:=0 to ListBox1.Items.Count-1 do
  144.     msMessage1.Attachments.AddFile(ListBox1.Items[i]);
  145.   DisableControls;
  146.   try
  147.     msSMTPClient1.Send;
  148.   finally
  149.     EnableControls;
  150.   end;
  151. end;
  152.  
  153. procedure TSMTPForm.CancelButtonClick(Sender: TObject);
  154. begin
  155.   msSMTPClient1.Cancel;
  156. end;
  157.  
  158. procedure TSMTPForm.SetupButtonClick(Sender: TObject);
  159. begin
  160.   with TSetupDlg.Create(Self) do
  161.   try
  162.     ServerEdit.Text:=msSMTPClient1.Host;
  163.     UserAddressEdit.Text:=msMessage1.Sender.Address;
  164.     UserNameEdit.Text:=msMessage1.Sender.Name;
  165.     LogFileNameEdit.Text:=msSMTPClient1.LogFileName;
  166.     ShowModal;
  167.     if ModalResult=mrOk then
  168.     begin
  169.       msSMTPClient1.Host:=ServerEdit.Text;
  170.       msMessage1.Sender.Address:=UserAddressEdit.Text;
  171.       msMessage1.Sender.Name:=UserNameEdit.Text;
  172.       msSMTPClient1.LogFileName:=LogFileNameEdit.Text;
  173.     end;
  174.   finally
  175.     free;
  176.   end;
  177. end;
  178.  
  179. procedure TSMTPForm.FormCreate(Sender: TObject);
  180. begin
  181.   IniName:=ChangeFileExt(Application.ExeName,'.ini');
  182.   with TIniFile.Create(IniName) do
  183.   try
  184.     msSMTPClient1.Host:=ReadString('Setup','Host','');
  185.     msMessage1.Sender.Address:=ReadString('Setup','EMail Address','');
  186.     msMessage1.Sender.Name:=ReadString('Setup','Name','');
  187.     msSMTPClient1.LogFileName:=ReadString('Setup','Log File','');
  188.   finally
  189.     free;
  190.   end;
  191. //  msSMTPClient1.SleepTime:=200;
  192.   DragAcceptFiles(Handle,true);
  193. end;
  194.  
  195. procedure TSMTPForm.FormClose(Sender: TObject; var Action: TCloseAction);
  196. begin
  197.   with TIniFile.Create(IniName) do
  198.   try
  199.     WriteString('Setup','Host',msSMTPClient1.Host);
  200.     WriteString('Setup','EMail Address',msMessage1.Sender.Address);
  201.     WriteString('Setup','Name',msMessage1.Sender.Name);
  202.     WriteString('Setup','Log File',msSMTPClient1.LogFileName);
  203.   finally
  204.     free;
  205.   end;
  206.   msSMTPClient1.SaveLogFile;
  207. end;
  208.  
  209. procedure TSMTPForm.AttachButtonClick(Sender: TObject);
  210. var
  211.   i : Integer;
  212. begin
  213.   with TOpenDialog.Create(Self) do
  214.   try
  215.     Filter:='All Files (*.*)|*.*';
  216.     Options:=[ofHideReadOnly,ofAllowMultiSelect];
  217.     if Execute then
  218.     begin
  219.       for i:=0 to Files.Count-1 do
  220.         ListBox1.Items.Add(Files[i]);
  221.     end;
  222.   finally
  223.     Free;
  224.   end;
  225. end;
  226.  
  227. procedure TSMTPForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  228. begin
  229.   if not SendInfoPanel.Enabled then
  230.   begin
  231.     MessageDlg('Transfer in Progress.  Click Cancel button first.',
  232.                mtError,[mbOk],0);
  233.     CanClose:=false;
  234.   end
  235.   else
  236.     CanClose:=true;
  237. end;
  238.  
  239. procedure TSMTPForm.About1Click(Sender: TObject);
  240. begin
  241.   with TAboutDlg.Create(Self) do
  242.   try
  243.     ProgramName.Caption:='TmsSMTPClient Component Demo';
  244.     ShowModal;
  245.   finally
  246.     Free;
  247.   end;
  248. end;
  249.  
  250. procedure TSMTPForm.FormResize(Sender: TObject);
  251. begin
  252.   Bevel1.Width:=Width;
  253.   Bevel2.Width:=Width;
  254. end;
  255.  
  256. procedure TSMTPForm.WMDropFiles(var Msg : TMessage);
  257. var
  258.   FileName : PChar;
  259.   Drop : THandle;
  260. begin
  261.   Drop:=THandle(Msg.wParam);
  262.   FileName:=StrAlloc(255);
  263.   try
  264.     DragQueryFile(Drop,0,FileName,255);
  265.     ListBox1.Items.Add(StrPas(FileName));
  266.   finally
  267.     StrDispose(FileName);
  268.     DragFinish(Drop);
  269.   end;
  270. end;
  271.  
  272. procedure TSMTPForm.msSMTPClient1Connecting(Sender: TObject);
  273. begin
  274.   StatusBar1.Panels[0].Text:='Connecting to '+msSMTPClient1.Host;
  275. end;
  276.  
  277. procedure TSMTPForm.msSMTPClient1Connected(Sender: TObject);
  278. begin
  279.   StatusBar1.Panels[0].Text:='Connected';
  280. end;
  281.  
  282. procedure TSMTPForm.msSMTPClient1Disconnected(Sender: TObject);
  283. begin
  284.   StatusBar1.Panels[0].Text:='Disconnected';
  285. end;
  286.  
  287. procedure TSMTPForm.msSMTPClient1Preparing(Sender: TObject);
  288. begin
  289.   StatusBar1.Panels[0].Text:='Preparing the message';
  290. end;
  291.  
  292. procedure TSMTPForm.msSMTPClient1Sending(Sender: TObject);
  293. begin
  294.   StatusBar1.Panels[0].Text:='Sending the message';
  295. end;
  296.  
  297. procedure TSMTPForm.msSMTPClient1Sent(Sender: TObject);
  298. begin
  299.   MessageBeep(MB_ICONASTERISK);
  300.   MessageDlg('Message has been sent',mtInformation,
  301.               [mbOk],0);
  302. end;
  303.  
  304. procedure TSMTPForm.msSMTPClient1TransferProgress(Sender: TObject; Perc,
  305.   ByteCount, LineCount: Longint);
  306. begin
  307.   ProgressBar1.Position:=Perc;
  308. end;
  309.  
  310. end.
  311.